package org.wattdepot.simulation.oahugrid.strategy;

import java.util.List;
import org.wattdepot.simulation.oahugrid.demandcurve.DailyDemandCurve;
import org.wattdepot.simulation.oahugrid.powerplant.PowerPlantSet;

/**
 * Specifies the interface for a simulation strategy.
 * A simulation strategy generates the simulation data for a given day given a demand curve
 * and a set of power plants. 
 * @author Philip Johnson
 *
 */
public interface SimulationStrategy {
  
  /**
   * Implement a strategy for generating power for a given day.
   * @param curve The DailyDemandCurve for this day.
   * @param set The set of PowerPlants to be used. 
   * @return A list of SimulationEntries generated by this strategy.
   */
  public List<SimulationEntry> generateDay(DailyDemandCurve curve, PowerPlantSet set);

  /**
   * Implement a strategy for generating power for a given 15 minute interval.
   * @param curve The DailyDemandCurve for this day.
   * @param set The set of PowerPlants to be used. 
   * @param i The interval of interest, from 0 to 95.
   * @return A list of SimulationEntries generated by this strategy.
   */
  public List<SimulationEntry> generateInterval(DailyDemandCurve curve, PowerPlantSet set, 
      int i);

}
